package util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import main.Principal;

/**
 * Classe de subrotinas auxiliares
 * 
 * @author Andreia Rodrigues de Oliveira, Raphael Henrique Monteiro, Regis Hideki Hatori;
 * 
 */
public class ClasseAuxiliar {

	/**
	 * Preenche a listaBd do tipo {@link List} contida na classe
	 * {@link Principal}, com as linhas do arquivo bd.txt. Cada posicao da
	 * listaBd terah uma linha do arquivo.
	 * 
	 * @param main objeto da classe {@link Principal}
	 */
	public static void inicializaListaBd(Principal main) {

		try {

			BufferedReader reader = new BufferedReader(new FileReader("bd.txt"));
			String linha;

			while (reader.ready()) {

				linha = reader.readLine();
				main.getListaBd().add(linha);

			}

			reader.close();

		} catch (IOException e) {

			e.printStackTrace();
		}

	}

	/**
	 * Inicializa uma {@link List} contendo numeros de de 0 a (tamanhoDaLista - 1) em posicoes aleatorias
	 * 
	 * @param tamanhoDaLista
	 * @return {@link List} contendo numeros de 0 a (tamanhoDaLista - 1) em posicoes aleatorias
	 */
	public static List<Integer> inicializaListaDeNumerosAleatorios(int tamanhoDaLista) {

		List<Integer> listaDeNumerosAleatorios = new ArrayList<Integer>();

		for (int i = 0; i < tamanhoDaLista; i++) {
			listaDeNumerosAleatorios.add(i);
		}

		Collections.shuffle(listaDeNumerosAleatorios);

		return listaDeNumerosAleatorios;
	}

	/**
	 * Calcula uma posicao aleatoria entre 0 e 36241
	 * 
	 * @return uma posicao aleatoria da {@link List} listaBd da classe {@link Principal}
	 */
	public static int posicaoAleatoriaNoBd() {

		return (int) Math.round(36241 * Math.random());
	}

	/**
	 * Imprime o nome das {@link Thread}s do arranjo passado como parametro
	 * 
	 * @param threads arranjo de {@link Thread}s
	 */
	public static void imprimeThreds(Thread[] threads) {

		for (Thread thread : threads) {

			System.out.println(thread.getName());
		}
	}

}
